[[b2.history]]
= History

== Version 4.7.2

* Fix errors configuring intel-linux toolset if icpx is not in the PATH but
  icpc is in the PATH.
  -- _Mark E. Hamilton_
* Add `cxxstd=20` to msvc toolset now that VS 2019 onward supports it.
  -- _Peter Dimov_

== Version 4.7.1

* Fix regression for linking with `clang-win` toolset.
  -- _Peter Dimov_

== Version 4.7.0

Many, many fixes and internal cleanups in this release. But also adding
auto-detection and bootstrap for VS 2022 preview toolset.

* *New:* Add vc143, aka VS2022, aka cl.exe 17.x toolset support. Includes
  building engine and automatic detection of the prerelease toolset.
  -- _Sergei Krivonos_
* Allow alias targets to continue even if `<build>no` is in the usage
  requirement. Which allows composition of alias targets that may contain
  optional targets, like tests.
  -- _Dmitry Arkhipov_
* Fix use of `JAMSHELL` in gcc toolset.
  -- _René Ferdinand Rivera Morell_
* Fix compiling b2 enging such that it works when run in cross-architecture
  emulation context. I.e. when running arm binaries in QEMU 64 bit host.
  -- _René Ferdinand Rivera Morell_
* Default to 64bit MSVC on 64 bit hosts.
  -- _Matt Chambers_
* Remove `/NOENTRY` option for resource only DLLs to allow correct linking.
  -- _gnaggnoyil_
* Fix redefinition error of `unix` when compiling engine on OpenBSD.
  -- _Brad Smith_
* Fix building with clang on iOS and AppleTV having extra unrecognized
  compiler options.
  -- _Konstantin Ivlev_
* Add missing Boost.JSON to `boost` support module.
  -- _Dmitry Arkhipov_
* Add arm/arm64 target support in clang-win toolset.
  -- _Volo Zyko_
* Avoid warnings about threading model for qt5.
  -- _psandana_
* Unify Clang and GCC PCH creation.
  -- _Nikita Kniazev_
* Move Objective-C support to GCC toolset.
  -- _Nikita Kniazev_
* Support values for instruction-set feature for Xilinx ZYNQ.
  -- _Thomas Brown_
* MIPS: add generic mips architecture.
  -- _YunQiang Su_
* Fix preprocessing on MSVC compiler.
  -- _Nikita Kniazev_

== Version 4.6.1

* Fix building b2 engine with cygwin64.
  -- _René Ferdinand Rivera Morell_
* Fix version detection of clang toolset from compiler exec.
  -- _Nikita Kniazev_

== Version 4.6.0

This release wraps up a few new features that make using some toolsets easier
(thanks to Nikita). It's now also possible to specify empty flags features on
the command line, like `cxxfalgs=`, and have those be ignored. This helps to
make CI scripts shorter as they don't need to handle those cases specially.
And as usual there are many bug fixes and adjustments. Thanks to everyone who
contributed to this release.

* *New:* Allow clang toolset to be auto-configured to a specific version by using
  `toolset=clang-xx` on the command line.
  -- _Nikita Kniazev_
* *New:* Include pch header automatically and on-demand on gcc and msvc toolset to
  mirror clang functionality.
  -- _Nikita Kniazev_
* *New:* Features that are narked as 'free' and 'optional' will now be ignored when
  the value specified on the command line is empty. Hence once can specify
  `cxxflags=` on the command line without errors.
  -- _René Ferdinand Rivera Morell_
* Preserve `bootstrap.sh` invoke arguments to forward to the `build.sh` script.
  -- _tkoecker_
* Remove use of `local` in `buils.sh` to be compatible with some, not fully
  capable, shells.
  -- _Tanzinul Islam_
* Workaround shell array ref error in `build.sh` on busybox shells.
  -- _tkoecker_
* Check for needing `-pthread` to build engine with gcc on some platforms.
  -- _tkoecker_
* Default to using clang on MacOS.
  -- _Stéphan Kochen_
* Add `/python//numpy` target to use as a dependency to communicate version
  specific properties.
  -- _Peter Dimov_
* Add default value for cxx and cxxflags from env vars `CXX` and `CXXFLAGS`
  when using the custom `cxx` toolset to build the engine.
  -- _Samuel Debionne_ and _René Ferdinand Rivera Morell_
* Fix detection of `intel-linux` toolset installation when only the compiler
  executable is in the `PATH`.
  -- _René Ferdinand Rivera Morell_
* Fix `b2` executable path determination for platforms that don't have a
  native method of getting the path to executables, like OpenBSD.
  -- _René Ferdinand Rivera Morell_
* Fix `property.find` error message.
  -- _Thomas Brown_

== Version 4.5.0

Some minor fixes to improve some old issues.

* Reenable ability of generators to return `property-set` as first item.
  -- _Andrew McCann_
* Fix examples to return 0 on success.
  -- _Mateusz Łoskot_
* Handle spaces in CXX path in `config_toolset.bat`.
* Fix Conan b2 generator link, and pkg-config doc build error.
  -- _René Ferdinand Rivera Morell_

== Version 4.4.2

This release is the first of the new home for B2 at Build Frameworks Group.

* Change references in documentation and sources of boost.org to point
  at equivalent bfgroup resources.
  -- _René Ferdinand Rivera Morell_
* New theme for B2 site and documentation.
  -- _René Ferdinand Rivera Morell_

== Version 4.4.1

Minor patch to correct missing fix for macOS default engine compiler.

* Fix engine build defaulting to gcc instead of clang on macOS/Xcode.
  -- _René Ferdinand Rivera Morell_

== Version 4.4.0

Along with a variety of fixes this version introduces "dynamic" response file
support for some toolsets. This means that under most circumstances, if
supported by the toolset, response files are not generated. Instead the
command is expanded to include the options directly.

* *New:* Add `response-file` feature to control the kind of response file usage in
  toolset action.
  -- _René Ferdinand Rivera Morell_
* *New:* Add `:O=value` variable modifier for `@()` expansion.
  -- _René Ferdinand Rivera Morell_
* *New:* Add `:<=value` and `:>=value` variable modifiers for prefix and postfix
  values *after* the complete expansion of variable references.
  -- _René Ferdinand Rivera Morell_
* *New:* Implement PCH on clang-win and clang-darwin.
  -- _Nikita Kniazev_
* *New:* Add support for Intel oneAPI release to intel-linux toolset.
  -- _René Ferdinand Rivera Morell_
* *New:* Add support for Intel oneAPI release to intel-windows toolset.
  -- _Edward Diener_
* Remove one at time linking limit. Once upon a time this was a performance
  tweak as hardware and software was not up to doing multiple links at once.
  Common setups are better equipped.
  -- _René Ferdinand Rivera Morell_
* Fix building engine with GCC on AIX.
  -- _René Ferdinand Rivera Morell_
* Support building engine as either 32 or 64 bit addressing model.
  -- _René Ferdinand Rivera Morell_
* Basic support for building b2 engine on GNU/Hurd.
  -- _Pino Toscano_
* Update "borland" toolset to bcc32c for building B2.
  -- _Tanzinul Islam_
* Ensure Embarcadero toolset name is only "embtc".
  -- _Tanzinul Islam_
* Adapt for Emscripten 2.0 change of default behavior for archives.
  -- _Basil Fierz_
* Fix path to bootstrap for back compat.
  -- _René Ferdinand Rivera Morell_
* Add missing BOOST_ROOT to boot strap search.
  -- _René Ferdinand Rivera Morell_
* Fix for engine compile on FreeBSD.
  -- _René Ferdinand Rivera Morell_
* Default MSVC to a native platform, and remove ambiguous implicit
  address-model ARM/ARM64 values.
  -- _Nikita Kniazev_
* Fix detection of MIPS32 for b2 engine build.
  -- _Ivan Melnikov_
* Enable building b2 engine with clang on Windows.
  -- _Gei0r_
* Fix building b2 engine with Intel Linux icpc.
  -- _Alain Miniussi_
* Rework `build.sh` to fix many bugs and to avoid use of common env vars.
  -- _René Ferdinand Rivera Morell_
* Remove limitation of relevant features for configure checks.
  -- _René Ferdinand Rivera Morell_
* Reformat configure check output to inform the variants of the checks in a
  reasonably brief form.
  -- _René Ferdinand Rivera Morell_
* Support building engine on Windows Bash with Mingw.
  -- _René Ferdinand Rivera Morell_

== Version 4.3.0

There are many invidual fixes in this release. Many thanks for the
contributions. Special thanks to Nikita for the many improvements to msvc
and general plugging of support holes in all the compilers.

There are some notable new features from Dmitry, Edward, and Nkita:

* *New:* Add `force-include` feature to include headers before all sources.
  -- _Nikita Kniazev_
* *New:* Partial support for Embarcadero C++ compilers based on clang-5.
  -- _Edward Diener_
* *New:* Implement configurable installation prefixes that use features.
  -- _Dmitry Arkhipov_
* *New:* Add `translate-path` feature. The translate-path feature allows for
  custom path handling, with a provided rule, on a per target basis. This can
  be used to support custom path syntax.
  -- _René Ferdinand Rivera Morell_
* *New:* Add portable B2 system install option. This allows the b2 executable
  and the build system files to live side by side. And hence to be (re)located
  anywhere on disk. Soon to be used to supports Windows and other installers.
  This removes the need for the `boost-build.jam` file for bootstrap. Making
  it easier for users to get started.
  -- _René Ferdinand Rivera Morell_
* Unbreak building from VS Preview command prompt.
  -- _Marcel Raad_
* Fix compiler version check on macOS darwin toolset.
  -- _Bo Anderson_
* Remove pch target naming restriction on GCC.
  -- _Nikita Kniazev_
* Select appropriate QNX target platform.
  -- _Alexander Karzhenkov_
* Various space & performance improvements to the b2 engine build on Windows.
  -- _Nikita Kniazev_
* Fill extra and pedantic warning options for every compiler.
  -- _Nikita Kniazev_
* Include OS error reason for engine IO failures.
  -- _Nikita Kniazev_
* Use /Zc:inline and /Zc:throwingNew flags for better language conformance.
  -- _Nikita Kniazev_
* Add cxxstd value 20 for C++20.
  -- _Andrey Semashev_
* Parallel B2 engine compilation on MSVC.
  -- _Nikita Kniazev_
* Updated instruction-set feature with new x86 targets.
  -- _Andrey Semashev_
* Pass /nologo to rc on Windows compilers.
  -- _Nikita Kniazev_
* Fixed negation in conditional properties.
  -- _Nikita Kniazev_
* Remove leftover manifest generation early exiting.
  -- _Nikita Kniazev_
* Fix timestamp delta calculation.
  -- _Nikita Kniazev_
* Add missing assembler options to clang-win.jam, to enable Context to build.
  -- _Peter Dimov_
* Updated scarce `:chars` documentation with `:BS` example.
  -- _Nikita Kniazev_
* Fix link statically against boost-python on linux.
  -- _Joris Carrier_
* Ongoing cleanup of engine build warnings.
  -- _René Ferdinand Rivera Morell_
* Allow self-testing of toolsets that use response files.
  -- _René Ferdinand Rivera Morell_
* Port `Jambase` to native C++. Hence removing one of the oldest parts of the
  original Jam bootstrap process.
  -- _René Ferdinand Rivera Morell_

== Version 4.2.0

This release is predominantly minor fixes and cleanup of the engine. In
particular the bootstrap/build process now clearly communicates C++11
requirement.

* Add `saxonhe_dir` action.
  -- _Richard Hodges_
* Add CI testing for historical Boost versions on Windows MSVC.
  -- _René Ferdinand Rivera Morell_
* Check for C++11 support when building engine. Including an informative
  error message as to that fact.
  -- _René Ferdinand Rivera Morell_
* Update Jam grammar parser with latest `bison` version.
  -- _René Ferdinand Rivera Morell_
* Allow root `b2 b2` engine build to work even if `bison` grammar generator
  is not available.
  -- _René Ferdinand Rivera Morell_
* Warning free engine build on at least Windows, macOS, and Linux.
  -- _René Ferdinand Rivera Morell_
* Sanitize Windows engine build to consistently use ANSI Win32 API.
  -- _Mateusz Loskot_
* Fix b2 engine not exiting, with error, early when it detects a Jam language
  error.
  -- _Mateusz Loskot_
* Print help for local modules, i.e. current dir.
  -- _Thomas Brown_

== Version 4.1.0

Many small bug fixes in this release. But there are some new features also.
There's now an `lto` feature to specify the use of LTO, and what kind. The
existing `stdlib` feature now has real values and corresponding options
for some toolsets. But most importantly there's new documentation for all
the features.

Thank to all the users that contributed to this release with these changes:

* Support for VS2019 for intel-vin 19.0. -- _Edward Diener_
* Fix compiler warnings about `-std=gnu11` when building `b2` on Cygwin. --
  _Andrey Semashev_
* Add example of creating multiple PCHs for individual headers.
  -- _René Ferdinand Rivera Morell_
* Add QNX threading flags for GCC toolset. -- _Aurelien Chartier_
* Fix version option for IBM and Sun compilers when building b2 engine
  -- _Juan Alday_
* Rename `strings.h` to `jam_strings.h` in `b2` engine to avoid clash with
  POSIX `strings.h` header. -- _Andrey Semashev_
* Add options for `cxxstd` feature for IBM compiler. -- _Edward Diener_
* Many fixes to intel-win toolset. -- _Edwad Diener_
* Add z15 instruction set for gcc based toolsets. -- _Neale Ferguson_
* Improve using MSVC from a Cygwin shell. -- _Michael Haubenwallner_
* Add LTO feature and corresponding support for gcc and clang toolsets.
  -- _Dmitry Arkhipov_
* Fix errors when a source doesn't have a type. -- _Peter Dimov_
* Add documentation for features. -- _Dmitry Arkhipov_
* Enhance `stdlib` feature, and corresponding documentation, for clang, gcc,
  and sun toolsets. -- _Dmitry Arkhipov_
* Install rule now makes explicit only the immediate targets it creates.
  --  _Dmitry Arkhipov_
* Add armasm (32 and 64) support for msvc toolset. -- _Michał Janiszewski_
* Fix errors with custom un-versioned gcc toolset specifications.
  -- _Peter Dimov_
* Allow arflags override in gcc toolset specifications. -- _hyc_
* Fix founds libs not making it to the clang-win link command line.
  -- _Peter Dimov_
* Updated intel-win toolset to support for Intel C++ 19.1.
  -- _Edward Diener_
* Detect difference between MIPS32 and MIPS64 for OS in b2 engine.
  -- _YunQiang Su_

== Version 4.0.1

This patch release fixes a minor issue when trying to configure toolsets that
override the toolset version with a non-version tag. Currently this is only
known to be a problem if you: (a) configure a toolset version to something
like "`tot`" (b) in Boost 1.72.0 when it creates cmake install artifacts.
Fix for this was provided Peter Dimov.

== Version 4.0.0

After even more years of development the landscape of build systems has changed
considerably, and so has the landscape of compilers. This version marks the
start of B2 transitioning to a {CPP} implementation. Initially this means that
the engine will be compiled as C++ source but that source is still the base
C implementation. Over time it will transform to a {CPP} code base in both the
engine and build system. Some changes in this start:

* Requires {CPP} 11 to build engine.
* Simplified build scripts to make it easier to maintain.
* Building with {CPP} optimizations gives an immediate performance improvement.

Other changes in this release:

* Add support for using prebuilt OpenSSL. -- _Damian Jarek_
* Define the riscv architecture feature. -- _Andreas Schwab_
* Add ARM64 as a valid architecture for MSVC. -- _Marc Sweetgall_
* Set coverage flags, from coverage feature, for gcc and clang. -- _Damian Jarek_
* Add s390x CPU and support in gcc/clang. -- _Neale Ferguson_
* Support importing pkg-config packages. -- _Dmitry Arkhipov_
* Support for leak sanitizer. -- _Damian Jarek_
* Fix missing `/manifest` option in clang-win to fix admin elevation for exes
  with "update" in the name. -- _Peter Dimov_
* Add `freertos` to `os` feature. -- _Thomas Brown_
* Default parallel jobs (`-jX`) to the available CPU threads. -- _René Ferdinand Rivera Morell_
* Simpler coverage feature. -- _Hans Dembinski_
* Better stacks for sanitizers. -- _James E. King III_

WARNING: The default number of parallel jobs has changed in this release from
"1" to the number of cores. There are circumstances when that default can be
larger than the allocated cpu resources, for instance in some virtualized
container installs.
